package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import misc.Enregistrement;
/**
 * Cette classe gere l'enregistrement du travail dans un fichier
 * @author Romain POGU
 * @author Anthony MAUGENDRE
 * @version 1.0
 *
 */
public class ControlMenuItemEnregistrerSous implements ActionListener {

	private FenetAffiche frame;
	private boolean cancel;

	/**
	 * Constructeur
	 * 
	 * @param frame fenetre sur laquelle le composant est affiche
	 */
	public ControlMenuItemEnregistrerSous(FenetAffiche frame) {
		this.frame = frame;
	}

	/**
	 * Cette Methode propose de choisir un fichier ou enregistrer le travail courant
	 */
	public void actionPerformed(ActionEvent e) {
		cancel = false;
		int ret;
		// TODO Auto-generated method stub
		ObjectOutputStream fluxObjEcrit = null;
		// Si le filepath est null alors le fichier n'a pas deja ete enregistrer
		// ou un fichier a ete ouvert
		JFileChooser chooser = new JFileChooser();
		int returnVal = chooser.showSaveDialog(chooser);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			// TODO tester si le fichier existe ou non
			File fichier = chooser.getSelectedFile();
			if (fichier.exists()) {
				ret = JOptionPane.showConfirmDialog(frame,
						"Le fichier \"" + chooser.getSelectedFile().getName() +"\" existe deja. Etes-vous sur de vouloir le remplacer? ",
						"Remplacer fichier", 2);
				if (ret == JOptionPane.OK_OPTION)
					frame.setFilePath(chooser.getCurrentDirectory()
							+ System.getProperty("file.separator")
							+ chooser.getSelectedFile().getName());
				else
					cancel = true;
			} else {
				frame.setFilePath(chooser.getCurrentDirectory()
						+ System.getProperty("file.separator")
						+ chooser.getSelectedFile().getName());
			}
		}

		if (returnVal == JFileChooser.CANCEL_OPTION) {
			System.out.println("Sauvegarde du fichier annulee");
			// Si on annule la sauvegarde, on ne sauvegarde pas :)
			cancel = true;
		}

		if (cancel != true) {

			try {
				fluxObjEcrit = new ObjectOutputStream(new FileOutputStream(
						frame.filePath));
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				frame.setFilePath(null);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				frame.setFilePath(null);
			}
			try {
                //Creation enregistrement
                BarreOutils b=frame.barreOutils;

                Enregistrement enr = new Enregistrement(b.getM(),b.getAlpha(),b.getBeta(),b.getK(),b.getR(),b.getIterations(),frame.villes);
				fluxObjEcrit.writeObject(enr);
				System.out.println(frame.filePath + " sauve!");
				frame.setFilePath(frame.filePath);
			} catch (IOException e1) {
				System.out.println("Sauvegarde impossible: Impossible d'ouvrir le fichier: "
						+ frame.filePath);
				frame.setFilePath(null);
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

		}
	}
}
